#ifndef PROCESSOR_H
#define PROCESSOR_H

#include "Prerequisites.hpp"

class Processor
{
friend class RealMachine;
public:
    Processor();
    void Run();
private:
    WordVector *memory;
    Word ReadMem(Byte x, Byte y);
    void WriteMem(Byte x, Byte y, Word w);
    Word ReadMem(int address);
    void WriteMem(int address, Word w);

    void Print(String string);
    void Print(int X);
    void Print(Byte byte);
    void Print(DByte dByte);
    void Print(Word word);
    void Print(DWORD dword);
    void Print();

    //registers:
    Word RA;
    Word RB;
    Word IO;
    Word NEXT;
    DByte SR;
    DByte SPR;
    DByte PL;
    DByte BAR;
    DByte PS;
    Byte MODE;
    Byte PPR;
    Byte TIME;
    Byte SF;

    //commands:
    void HALT(void);
    void LA(Byte x, Byte y);
    void LB(Byte x, Byte y);
    void SA(Byte x, Byte y);
    void SB(Byte x, Byte y);
    void CHAN(void);
    void LCK(Byte x);
    void UA(Byte x, Byte y);
    void UB(Byte x, Byte y);
    void DA(Byte x, Byte y);
    void DB(Byte x, Byte y);
    void UNL(Byte x);
    void ADDA(void);
    void SUBA(void);
    void MULT(void);
    void DI(DByte z);
    void CMPA(void);
    void JP(DByte q);
    void JE(DByte q);
    void JG(DByte q);
    void JL(DByte q);
    void READ(Word command);
    void WRIT(Word command);
    void RDM(Word command);
    void WTM(Word command);
    //
};

#endif // PROCESSOR_H
